-- https://github.com/jasoncodes/dotfiles/blob/master/hammerspoon/control_escape.lua

send_escape = false
last_mods = {}

control_key_handler = function()
  send_escape = false
end

control_key_timer = hs.timer.delayed.new(0.15, control_key_handler)

control_handler = function(evt)
  local new_mods = evt:getFlags()
  if last_mods["ctrl"] == new_mods["ctrl"] then
    return false
  end
  if not last_mods["ctrl"] then
    last_mods = new_mods
    send_escape = true
    control_key_timer:start()
  else
    if send_escape then
      hs.eventtap.keyStroke({}, "ESCAPE")
    end
    last_mods = new_mods
    control_key_timer:stop()
  end
  return false
end


other_handler = function(evt)
  send_escape = false
  return false
end


local obj = {}

function obj:init()
  control_tap = hs.eventtap.new({hs.eventtap.event.types.flagsChanged}, control_handler)
  control_tap:start()
  other_tap = hs.eventtap.new({hs.eventtap.event.types.keyDown}, other_handler)
  other_tap:start()
end

return obj

